博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
仿pinterest实现瀑布流布局效果
阅读量:6324 次
发布时间:2019-06-22

本文共 4883 字,大约阅读时间需要 16 分钟。

在张鑫旭的博客里,有一片文章介绍 实现的文章,(要查看演示,请单击)本文是在其基础上进行的二次开发,使其更具实用性。

 

 

这里,主要涉及数据从数据库里读取,单击图片可以缩放等。

本文附件附带的源代码,有兴趣可以下载看看

下载的程序打开pic.aspx页面显示图片列表(您需要手动输入测试数据)。

 

单击图片会出现缩放等,除此外,还可以分页,(排序),以及设置页面大小等。

 

 

 下面介绍本程序的大致实现。

 

 

1.建立数据库

见附件里SQL.txt,为了使得效果更明显,需要输入测试数据,越多越好

 

2.返回JSON数据 (ajax_getpics.aspx 页面)

 

返回数据使用了自定义分页,这里使用了SQL2005+上的Row_Number()函数。在GetData里,还有3个参数:orderby设置数据排序方式(一般网站的图片,都会让用户按照最新上传,点击率,回复率排序),预留这个参数就是为了解决这个问题。

pageIndex是通过传递的URL来获取的,也就是用户访问了第几页

pageSize设置页面的大小,在本演示中,设置了200.

public DataTable GetData()        {            string orderBy = "pic_id";            int pageIndex = int.Parse(Request["pageIndex"]);            int pageSize = int.Parse(Request["pageSize"]);            string sql = @"declare @startRowIndex int set @pageIndex=@pageIndex-1 set @startRowIndex=@pageIndex*@pageSize+1;WITH PICList AS(   select pic_id,user_id,orginpath,description,thumpath, commpeople,  click,  ROW_NUMBER() OVER (ORDER BY pic_id DESC) as RowNum    FROM    love_pics where isapproved=1)   Select * from  PICList WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @pageSize-1)  order by " + orderBy + @" desc " ;            DataTable ds = new DataTable();            SqlConnection conn = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["con"].ConnectionString);            SqlCommand dCmd = new SqlCommand();            dCmd.Parameters.AddWithValue("@pageIndex", pageIndex);            dCmd.Parameters.AddWithValue("@pageSize", pageSize);            dCmd.Parameters.AddWithValue("@orderBy", orderBy);            dCmd.CommandText = sql;            dCmd.Connection = conn;            SqlDataAdapter da = new SqlDataAdapter();            da.SelectCommand = dCmd;            da.Fill(ds);            return ds;        }

 

 

3.制作瀑布页面 pic.aspx

在开始前,我们先定义一个页面大小pageSize和自定义分页的实现。关于Pagination可以参考源代码里具体实现。

public int pageindex = 1;    protected void Page_Load(object sender, EventArgs e)    {        if (!string.IsNullOrEmpty(Request.QueryString["currentpage"]))        {            pageindex = int.Parse(Request.QueryString["currentpage"]);        }        string sql = " Select count(*) from love_pics where isapproved=1 ";                // string i = DBHelper.Instance.ExeScalar(sql).ToString();        string i = "1000";        //执行上面SQL语句,即可返回记录说,这里使用了硬编码,加上是100页               //附带的1=1只是用于演示如何自带参数        litPaging2.Text = litPaging1.Text = Pagination(int.Parse(i), 200, pageindex, "pic.aspx?1=1&");    }

 

 

4.获取JSON返回的数据,也就是用JQuery的getJSON,没设么特别的,其中pageindex是我们后台定义的页码。 后面自动跟了一个random是因为

js在请求时,即使你刷新页面,但是如果参数不变那么他自动使用本地缓存,所以加上random使得每次请求参数都是变更的

var pics=new Array() var ids=new Array(); var intros=new Array();  var uids=new Array(); var clicks=new Array();var comms=new Array();                $.getJSON(             'ajax_getpics.aspx',              { pageIndex: <%=pageindex%>, PageSize: "200", random: Math.random() },         function (data) {              $.each(data, function (i, entry) {                           pics[i]=entry['orginpath'];               ids[i]=entry["pic_id"];               intros[i]=entry["description"];               uids[i]=entry["user_id"];               clicks[i]=entry["click"];               comms[i]=entry["commpeople"];               });      //do detect

 

 瀑布页码代码,这个代码是在页码加载完毕后加载的,因为刚才说过需要增加单击图片时,弹出预览大图的效果,所以这里使用了插件

因此代码里增加了下图红色的标记

// 页面加载初始创建        create: function () {            this.columnNumber = Math.floor(document.body.clientWidth / this.columnWidth);            var start = 0, htmlColumn = '', self = this;            for (start; start < this.columnNumber; start += 1) {                htmlColumn = htmlColumn + '' +                function () {                    var html = '', i = 0;                    for (i = 0; i < 5; i += 1) {                        self.indexImage = start + self.columnNumber * i;                        var index = self.getIndex();                        html = html + '   '+self.getIntro().substring(0,50)+'  
'+self.getClick()+' click      '+ self.getComm()+' comment
'; } return html; } () + '
'; } htmlColumn += ''; this.container.innerHTML = htmlColumn; this.detectLeft = document.getElementById("waterFallDetect").offsetLeft; return this; },

 

 

当页码滚动时,动态加载图片

 

 

// 滚动载入        append: function (column) {            this.indexImage += 1;            var html = '',  index = this.getIndex(),  imgUrl = index;            // 图片尺寸            var aEle = document.createElement("div");                       aEle.className = "pic_a";            aEle.innerHTML = ' '+this.getIntro()+'';            column.appendChild(aEle);                         if (this.indexImage >= 200) {                  this.loadFinish = true;            }            return this;        },

 

这样,一个比较完成的例子就完成了。

转载地址:http://edlaa.baihongyu.com/

你可能感兴趣的文章
2015年10月23日作业
查看>>
MySQL5.7 加强了root用户登录安全性
查看>>
CentOS 6.3_Nagios安装配置与登录
查看>>
加强型的记录集权限(数据集权限、约束表达式设置功能)实现方法界面参考...
查看>>
Linux 内存机制
查看>>
linux下定时任务
查看>>
SharePoint 2013 部署 Part 1
查看>>
DWGSee看图纸dwg文件阅读器免费下载地址
查看>>
高能天气——团队Scrum冲刺阶段-Day 1-领航
查看>>
ISI CVPR journal ranking
查看>>
free movie
查看>>
列表组
查看>>
CF 988E Divisibility by 25 思维 第十二
查看>>
Linux Shell多命令执行
查看>>
Java中的异常处理:何时抛出异常,何时捕获异常,何时处理异常?
查看>>
css3中的变形(transform)、过渡(transtion)、动画(animation)
查看>>
tomcat生产环境JDK部署及虚拟主机等常用配置详解
查看>>
web服务器tomcat入门实战
查看>>
AVEVA CSG 几何图形输出接口
查看>>
POJ 2653 Pick-up sticks(几何)
查看>>